package ide.modelo;

public class Traductor {

	public String traducirHexaABinario(String entrada) {
		String salida = "";
		Conversor conversor = new Conversor();
		Analizador analizador = new Analizador();

		boolean error = false;

		if (analizador.analizarHexa(entrada) == false) {
			error = true;
		} else {

			int i = 0;
			int j = entrada.split(" +")[0].length();
			String parte = "";

			while (!error && i < j) {
				parte = conversor.convertirHexaABinario(entrada.split(" +")[0].substring(i, i+1));
				if (parte != "") {
					salida += parte;
					i++;
				} else {
					error = true;
					salida = "";
				}
			}
		}
		return salida;
	}

	public String traducirEnsambladorAHexa(String entrada) {
		String salida = "";
		boolean error = false;
		Conversor conversor = new Conversor();
		Analizador analizador = new Analizador();

		if (analizador.analizarEnsam(entrada) == false) {
			error = true;
		} else {

			String[] partes = entrada.split(" +");
			String instruccion = partes[0];
			String parte = "";
			salida = conversor.convertirEnsamAHexa(instruccion);

			switch (instruccion){
			case "carmem":
			case "carinm":
			case "rot":
				parte=conversor.convertirEnsamAHexa(partes[1].split(",")[0]);
				if (parte!=""){
					salida+=parte + partes[1].split(",")[1];
				} else {
					error = true;
					salida="";
				}
				break;
			case "alm":
			case "sal":
				parte=conversor.convertirEnsamAHexa(partes[1].split(",")[1]);
				if (parte!=""){
					salida+=partes[1].split(",")[0]+parte;
				} else {
					error = true;
					salida="";
				}
				break;
			case "cop":
				salida += "0";
				int i=0;
				int j = partes[1].split(",").length;

				while (! error && i < j){
					parte=conversor.convertirEnsamAHexa(partes[1].split(",")[i]);
					if (parte!=""){
						salida+=parte;
						i++;
					} else {
						error = true;
						salida="";
					}
				}
				break;
			case "suma2":
			case "sumpf":
			case "or":
			case "and":
			case "xor":
				i=0;
				j = partes[1].split(",").length;

				while (! error && i < j){
					parte=conversor.convertirEnsamAHexa(partes[1].split(",")[i]);
					if (parte!=""){
						salida+=parte;
						i++;
					} else {
						error = true;
						salida="";
					}
				}
				break;
			case "parar":
				salida+="000";
				break;
			}
		}
		return salida;
	}
}